package api_day14;

import java.util.*;

public class NewFeature {
    //lambda表达式测试
    public static void main(String[] args) {
        //匿名内部类写法
        System.out.println("匿名内部类写法：");
        //例子一
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("例子一：匿名内部类实现Runnable接口");
            }
        }).start();
        //例子二
        //利用List.of(E... element)方法快速生成集合 -> 缺点：类似于Arrays.aslist()，此方法生成的集合不能增删
        List<String> list1 = List.of("Lucy", "Lili", "Nacy", "Urbbr", "Liberot", "Niya", "Aliser");
        //但是可以利用构造方法将生成的集合转成可以增删的list
        list1 = new ArrayList<>(list1);
        Collections.sort(list1,new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);
            }
        });
        System.out.println("例子二：创建的集合：" + list1);
        //例子三：自定义函数式接口
        new MyInterface() {
            /*@Override //空参无返回值
            public void method() {
                System.out.println("例子三：自定义函数式接口方法");
            }*/
            /*@Override //空参有返回值
            public String method() {
                return "例子三：自定义函数式接口方法";
            }*/
            /*@Override //有参无返回值
            public void method(int a) {
                System.out.println("例子三：自定义函数式接口方法" + a);
            }*/
            @Override //有参有返回值
            public String method(String str) {
                return "例子三：自定义函数式接口方法" + str;
            }
        }.method("123");
        //lambda优化写法 -> 核心思想：可推导即可省略
        System.out.println("lambda优化写法：");
        //例子一
        new Thread(() -> {
            System.out.println("例子一：lambad实现Runnable接口");
        }).start(); //语法：(参数列表) -> {逻辑代码}  ——仍然可优化
        //最终版本：如果具体实现只有一行代码，可以将{}、;一起省略
        //注意：如果有返回值，则{} ; return可以一起省略 - {} ; return是一对，要么一起省略要么全部都要写
        new Thread(() -> System.out.println("例子一：lambad实现Runnable接口最终优化")).start();
        //例子二
        List<String> list2 = List.of("Lucy", "Nacy", "Urbbr", "Liberot", "Niya", "Aliser");
        list2 = new ArrayList<>(list2);
        Collections.sort(list2,(String o1,String o2) -> {return o2.compareTo(o1);});
        System.out.println("例子二：lambda优化创建的集合：" + list2);
        Collections.sort(list2,(o1, o2) -> o2.compareTo(o1));
        System.out.println("例子二：lambda最终优化创建的集合：" + list2);
        //例子三：自定义函数式接口
        //((MyInterface) () -> System.out.println("例子三：自定义函数式接口方法")).method();
        //String str = ((MyInterface) () -> "例子三：自定义函数式接口方法").method();System.out.println(str);
        //((MyInterface) (a) -> System.out.println("例子三：自定义函数式接口方法" + a)).method(2);
        String str = ((MyInterface) (s) -> "例子三：自定义函数式接口方法" + s).method("123");System.out.println(str);
    }
}
